<?php if (!defined('BASEPATH'))  exit('No direct script acess allowed');

class Venda_model  extends CI_Model{
    private $tabela;
    
    function __construct() {
        parent::__construct();
        
        $this->tabela = 'venda';
    }
    
    function get_all(){
        
        $this->db->select('v.*, c.nome, c.cpf');
        
        $this->db->from($this->tabela .  ' AS v');
        
        $this->db->join('cliente AS c', 'c.id = v.cliente_id', 'LEFT');
        
        $vendas = $this->db->get();
        
        if($vendas->num_rows() > 0){
            
            return $vendas->result();
        }
        else {
            
            return array();
        }
     
    }
    function inserir($venda){
        

        
        $this->db->insert($this->tabela, $venda);
        
        $inseriu_venda = (bool)  $this->db->affected_rows();
        
        $id = $this->db->insert_id();
        
        $inseriu_itens = $this->insere_itens($venda,$id);

        return($inseriu_venda || $inseriu_itens);
    }
    
    function atualizar ($venda){
        
        
        $excluiu_itens = $this->exclui_itens((int)$venda->id);
        
        
         $inseriu_itens = $this->insere_itens($venda,(int)$venda->id);
 
       
        
        $this->db->where('id', (int)$venda->id);
        
        $this->db->update($this->tabela,$venda);
        
 
        
        $atualizou_venda = (bool)$this->db->affected_rows();
        
        return ($atualizou_venda || $excluiu_itens);
        
        
    }
    
    function get_by_id($id){
        
        $this->db->select('v.id as venda_id,v.observacoes,v.forma_pagamento, '
                . 'c.nome as nome_cliente,c.cpf, c.id as cliente_id, '
                . 'p.id as produto_id, p.nome as produto_nome,p.preco ,'
                . 'i.quantidade,i.valor_total ');
        
        $this->db->from($this->tabela .  ' AS v');
        
        $this->db->join('item_venda AS i', 'i.venda_id  = v.id','LEFT');
        
        $this->db->join('produto AS p', 'i.produto_id = p.id','LEFT');
        
        $this->db->join('cliente AS c', 'v.cliente_id = c.id','LEFT');
        
        $this->db->where('v.id', $id);
        
        $resultado = $this->db->get();
        
        if($resultado->num_rows() > 0){
            
            $venda = $resultado->row(0);
            $venda->itens_venda = array();
            $venda->total = 0;
            
            foreach ($resultado->result() as $r){
                
                $item = new stdClass();
                
                $item->produto_id = $r->produto_id;
                $item->nome       = $r->produto_nome;
                $item->preco      = $r->preco;
                $item->quantidade = $r->quantidade;
                $item->valor_total = $r->valor_total;
               
                $venda->itens_venda[] = $item;
                
                $venda->total += $item->valor_total;
                
            }
            
            return $venda;
            
        }
        
        else{
            
            return array();
        }
        
    }
    
        function remover($id){
        
        $this->exclui_itens( $id);
        
        $this->db->where('id', (int)$id);
        
        $this->db->delete($this->tabela);
        
        return (bool)$this->db->affected_rows();
    }
    function insere_itens($venda, $id){ 
        
        
        for($i =0; $i <sizeof($venda->produtos); $i++){
           
            $venda->produtos[$i]['venda_id'] = $id;
            
            
            $this->db->query('UPDATE produto SET quantidade = quantidade - ? WHERE id = ?',array($venda->produtos[$i]['quantidade'], $venda->produtos[$i]['produto_id']));
        } 
        
        $this->db->insert_batch('item_venda', $venda->produtos);
        
        return (bool)$this->db->affected_rows();
        
    }
    
    function exclui_itens($id){
       $produto = $this->get_id_produto($id);
       foreach ($produto as $p){
           $this->db->query('UPDATE produto SET quantidade = quantidade + ? WHERE id = ?',array($p->quantidade, $p->produto_id));
       }
       $this->db->where('venda_id',$id);
       $this->db->delete('item_venda');
       return (bool)$this->db->affected_rows();
  
    }
    function get_id_produto($venda_id){
       
        $this->db->select('produto_id ,quantidade');
        $this->db->from('item_venda');
        $this->db->where('venda_id',$venda_id);
        
        $resultado = $this->db->get();
        
        
        if($resultado->num_rows() > 0){
            
            return $resultado->result();
            
        }
        else{
            return array();
        }
    }
}
